
///////////////////////////////////////////////////////////////////////////////
//
//  Copyright (c) 2009, Perry L Miller IV
//  All rights reserved.
//  BSD License: http://www.opensource.org/licenses/bsd-license.html
//
///////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////
//
//  A single element to be drawn.
//
///////////////////////////////////////////////////////////////////////////////

#include "SceneGraph/Draw/Element.h"

#include "Usul/Functions/NoThrow.h"

using namespace SceneGraph::Draw;


///////////////////////////////////////////////////////////////////////////////
//
//  Constructor.
//
///////////////////////////////////////////////////////////////////////////////

Element::Element ( Shape::RefPtr shape, 
                   StateContainer::RefPtr stateContainer,
                   const Matrix &matrix,
                   int importance ) : BaseClass(),
  _shape ( shape ),
  _stateContainer ( stateContainer ),
  _matrix ( matrix ),
  _importance ( importance )
{
}


///////////////////////////////////////////////////////////////////////////////
//
//  Destructor.
//
///////////////////////////////////////////////////////////////////////////////

Element::~Element()
{
  USUL_TRY_BLOCK
  {
    _shape = Shape::RefPtr();
    _stateContainer = StateContainer::RefPtr();
  }
  USUL_DEFINE_CATCH_BLOCKS ( "2474848592" );
}


///////////////////////////////////////////////////////////////////////////////
//
//  Get the shape.
//
///////////////////////////////////////////////////////////////////////////////

Element::Shape::RefPtr Element::shape()
{
  return _shape;
}


///////////////////////////////////////////////////////////////////////////////
//
//  Get the state-container.
//
///////////////////////////////////////////////////////////////////////////////

Element::StateContainer::RefPtr Element::stateContainer()
{
  return _stateContainer;
}


///////////////////////////////////////////////////////////////////////////////
//
//  Get the shared matrix.
//
///////////////////////////////////////////////////////////////////////////////

const Element::Matrix &Element::matrix() const
{
  return _matrix;
}


///////////////////////////////////////////////////////////////////////////////
//
//  Get the importance.
//
///////////////////////////////////////////////////////////////////////////////

int Element::importance() const
{
  return _importance;
}
